Push API
W3Cでは Push API、RFC では Web Push など
RFC 8030 HTTP Pushを使った一般的なイベント配信
RFC 8291 Web Pushのメッセージ暗号化
RFC 8292 自主的アプリケーションサーバ識別子 VAPID for Web Push 送信側のapplication server アプリケーションサーバ
受信側のPush service
ブラウザ
の3つでやりとり、メッセージは暗号化されているのでPush serviceでは読めない、という感じのようだ
Push API
W3C Working Draft 01 December 2025
概要
Push API は、pushサービスを介して Web アプリケーションにpushメッセージを送信することを可能にします。アプリケーションサーバーは、Web アプリケーションやuser agentが非アクティブな場合でも、いつでもpushメッセージを送信できます。pushサービスは、ユーザーエージェントへの確実かつ効率的な配信を保証します。プッシュメッセージは、Web アプリケーションのオリジンで実行されるサービスワーカーに配信され、サービスワーカーはメッセージに含まれる情報を使用してローカル状態を更新したり、ユーザーに通知を表示したりできます。
この仕様は、アプリケーションサーバーまたはuser agentがpush serviceとどのようにやり取りするかを記述する Web プッシュプロトコルで使用するために設計されています。
このドキュメントのステータス
このセクションでは、このドキュメントの発行時点でのステータスについて説明します。W3C の最新の出版物およびこの技術レポートの最新版は、W3C 標準およびドラフトのインデックスで確認できます。
このドキュメントは、Web Applications Working Groupによって勧告トラックを使用してワーキングドラフトとして公開されました。
ワーキングドラフトとして公開されたことは、W3C およびそのメンバーによる承認を意味するものではありません。
これは草稿であり、いつでも他の文書によって更新、置換、または廃止される可能性があります。この文書を進行中の作業以外のものとして引用することは不適切です。
この文書は、W3C特許ポリシーに基づいて活動するグループによって作成されました。W3Cは、このグループの成果物に関連して行われた特許開示の公開リストを維持しています。そのページには、特許開示の手順も記載されています。必須クレームを含むと思われる特許について実際に知識を有する個人は、W3C特許ポリシーのセクション6に従って情報を開示しなければなりません。
この文書は、2025年8月18日版W3Cプロセス文書に準拠します。
もくじ(略)
1. はじめに
このセクションは規範的なものではありません。
Push APIを使用すると、Webアプリケーションはユーザーエージェントと非同期的に通信できます。これにより、アプリケーションサーバーは、ユーザーがWebアプリケーションを開くのを待つことなく、情報が判明した時点でユーザーエージェントに時間的に重要な情報を提供できます。
ここで定義するプッシュサービスは、いつでもプッシュメッセージを配信できます。
特に、Webアプリケーションがブラウザウィンドウでアクティブになっていない場合でも、pushメッセージはWebアプリケーションに配信されます。これは、ユーザーがWebアプリケーションを閉じても、pushメッセージを受信した際にWebアプリケーションを再起動できるというメリットがあるユースケースに対応しています。例えば、pushメッセージは、WebRTCコールが着信したことをユーザーに通知するために使用されることがあります。
pushメッセージは、ユーザーエージェントが一時的にオフラインの場合でも送信できます。これをサポートするため、pushサービスは、ユーザーエージェントが利用可能になるまで、ユーザーエージェント宛てのメッセージを保存します。これは、ユーザーがオフラインの間に発生した変更をWebアプリケーションが検知し、ユーザーエージェントにタイムリーに関連情報を提供できるようにするためのユースケースをサポートします。pushメッセージは、ユーザーエージェントが接続可能になり、メッセージが配信可能になるまで、pushサービスによって保存されます。
Push APIは、ユーザーエージェントがWebアプリケーションをアクティブに使用している場合、例えばユーザーがWebアプリケーションをアクティブに使用している場合や、Webアプリケーションがアクティブなワーカー、フレーム、またはバックグラウンドウィンドウを介してアプリケーションサーバーとアクティブな通信を行っている場合などにも、pushメッセージの確実な配信を保証します。ただし、これはPush APIの主なユースケースではありません。Webアプリケーションは、アプリケーションサーバーとの常時通信を維持する必要がないように、頻度の低いメッセージに対してPush APIを使用することを選択する場合があります。
プッシュメッセージングは、ユーザーエージェントとWebアプリケーション間にアクティブな通信チャネルが確立されていない場合に最適です。プッシュメッセージの送信には、Fetch APIやWebSocketなどのより直接的な通信方法と比較して、はるかに多くのリソースが必要です。プッシュメッセージは通常、直接通信よりもレイテンシが高く、使用に制限がある場合もあります。ほとんどのプッシュサービスは、送信できるプッシュメッセージのサイズと数量に制限を設けています。
2. 依存関係
Web pushプロトコルRFC 8030は、ユーザーエージェントまたはアプリケーションサーバーとpushサービス間の通信を可能にするプロトコルを規定しています。このプロトコルの代わりに代替プロトコルを使用することも可能ですが、本仕様ではこのプロトコルの使用を前提としています。代替プロトコルは互換性のあるセマンティクスを提供することが期待されます。 RFC 9110のセクション8.4で説明されているContent-Encoding HTTPヘッダーは、プッシュメッセージのペイロードに適用されるコンテンツエンコーディングを示します。 3. 概念
3.1 アプリケーションサーバー Application server
アプリケーションサーバーとは、Webアプリケーションのサーバー側コンポーネントを指します。
3.2 プッシュメッセージ Push message
プッシュメッセージとは、アプリケーションサーバーからWebアプリケーションに送信されるデータです。
プッシュメッセージは、メッセージが送信されたプッシュサブスクリプションに関連付けられたアクティブなワーカーに配信されます。サービスワーカーが現在実行されていない場合は、配信を可能にするためにワーカーが起動されます。
3.3 宣言型プッシュメッセージ Declarative push message
宣言型プッシュメッセージとは、ユーザーエージェントが理解できるJSONドキュメントをデータとして持つプッシュメッセージです。ユーザーエージェントは、受信した各プッシュメッセージを宣言型プッシュメッセージパーサーを使用して解析し、宣言型プッシュメッセージかどうかを判断します。
宣言型プッシュメッセージを使用すると、サービスワーカーを介さずに通知を作成および表示できます。ただし、アプリケーションサーバーが必要に応じてサービスワーカーを関与させることも可能です。このような場合、例えばストレージ負荷のためにサービスワーカーが強制終了された場合などに、プッシュメッセージの宣言型性はバックアップとして機能します。また、通知データの送信において、よりオブジェクト指向的なアプローチを提供する。
code:例1.json
{
"web_push": 8030,
"notification": {
"title": "Ada emailed ‘London’",
"lang": "en-US",
"dir": "ltr",
"body": "Did you hear about the tube strikes?",
}
}
3.3.1 メンバー
宣言型プッシュメッセージには、以下のメンバーがあります。
web_push (必須)
8030 でなければならない整数。宣言型プッシュメッセージを他の JSON ドキュメントと区別するために使用されます。
notification (必須)
以下のメンバーで構成される JSON オブジェクト。すべて Notifications API の機能に類似していますが、場合によっては若干厳密な型指定がされていることがあります。title を除くすべてのメンバーは NotificationOptions ディクショナリから派生しており、併せて管理する必要があります。NOTIFICATIONS title (必須)
文字列。
dir
"auto"、"ltr"、または "rtl"。
lang
言語タグを保持する文字列。
body
文字列。
navigate (必須)
URL を保持する文字列。
tag
文字列。
image
URL を保持する文字列。
icon
URL を保持する文字列。
badge
URL を保持する文字列。
vibrate
32ビット符号なし整数の配列。
timestamp
64ビット符号なし整数。
renotify 再通知
boolean値。
silent
boolean値。
requireInteraction
boolean値。
注記
NotificationOptions辞書との整合性を保つため、require_interactionという名前は使用していません。
data
任意のJSON値。
actions
NotificationAction辞書から派生し、同時に管理される以下のメンバーで構成されるJSONオブジェクトの配列。
action(必須)
文字列。
title(必須)
文字列。
navigate(必須)
URLを保持する文字列。
icon
URLを保持する文字列。
mutable
boolean値。trueの場合、宣言型プッシュメッセージで記述されたNotificationオブジェクトを含むプッシュイベントがサービスワーカー(存在する場合)にディスパッチされます。